﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
using System.Data;

namespace GestionaleLib.Controller
{
    public class ctrlTipoPagamenti
    {
        #region "Testata"
        #region "Proprietà"
        private Connector Connessione;
        #endregion
        public enum Insert
        {
            Successo,
            Errore
        }
        public enum Edit
        {
            Successo,
            Errore
        }
        public enum Delete
        {
            Successo,
            Errore
        }
        #endregion

        public ctrlTipoPagamenti()
        {
            Connessione = Connector.Istance();
        }
        /// <summary>
        /// Inserisce un nuovo tipo di pagamento
        /// </summary>
        /// <param name="TipoPagamento"></param>
        /// <returns></returns>
        public Insert Nuovo(TipoPagamento TipoPagamento)
        {
            try
            {
                string sql = @"
                INSERT INTO Pagamento VALUES(@Id,@Descrizione,@Giorni)
                ";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)TipoPagamento.Id);
                cmd.Parameters.AddWithValue("@Descrizione", TipoPagamento.Descrizione);
                cmd.Parameters.AddWithValue("@Giorni", TipoPagamento.Giorni);
                cmd.ExecuteNonQuery();
                return Insert.Successo;
            }
            catch
            {
                throw new ExceptionErroreInserimento();
            }
        }
        /// <summary>
        /// Modifica una tipolgoia di pagamento
        /// </summary>
        /// <param name="TipoPagamento"></param>
        /// <returns></returns>
        public Edit Modifica(TipoPagamento TipoPagamento)
        {
            try
            {
                string sql = @"
                UPDATE Pagamento SET Descrizione=@Descrizione,Giorni=@Giorni
                    WHERE Id=@Id
                ";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)TipoPagamento.Id);
                cmd.Parameters.AddWithValue("@Descrizione", TipoPagamento.Descrizione);
                cmd.Parameters.AddWithValue("@Giorni", TipoPagamento.Giorni);
                cmd.ExecuteNonQuery();
                return Edit.Successo;
            }
            catch
            {
                throw new ExceptionErroreModifica(); 
            }
        }
        /// <summary>
        /// Cancella una tipologia di pagamento
        /// </summary>
        /// <param name="TipoPagamentoId"></param>
        /// <returns></returns>
        public Delete Cancella(TipoPagamento TipoPagamentoId)
        {
            try
            {
                string sql = @"DELETE FROM Pagamento
                     WHERE Id=@Id";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", TipoPagamentoId.Id);
                cmd.ExecuteNonQuery();
                return Delete.Successo;
            }
            catch
            {
                throw new ExceptionErroreCancellazione();
            }
        }
        /// <summary>
        /// Restituisce una lista di tipologie di pagamenti
        /// </summary>
        /// <returns></returns>
        public List<TipoPagamento> Seleziona()
        {
            string sql = @"
                SELECT * FROM Pagamento ORDER BY Descrizione ASC
                ";
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<TipoPagamento> ListaRitorno = new List<TipoPagamento>();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow item in dt.Rows)
                {
                    TipoPagamento TipoPagamentoRitorno = new TipoPagamento();
                    TipoPagamentoRitorno.Id = (Guid)item["Id"];
                    TipoPagamentoRitorno.Descrizione = item["Descrizione"].ToString();
                    TipoPagamentoRitorno.Giorni = Convert.ToInt16(item["Giorni"]);
                    ListaRitorno.Add(TipoPagamentoRitorno);
                }
                return ListaRitorno;
            }
            return null;
        }
        /// <summary>
        /// Restituisce una lista di tipologie di pagamenti tramite id
        /// </summary>
        /// <returns></returns>
        public List<TipoPagamento> Seleziona(Guid Id)
        {
            string sql = @"
                SELECT * FROM Pagamento WHERE Id='"+Id+"' ORDER BY Descrizione ASC";

            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<TipoPagamento> ListaRitorno = new List<TipoPagamento>();
            if (dt.Rows.Count > 0)
            {
                TipoPagamento TipoPagamentoRitorno = new TipoPagamento();
                TipoPagamentoRitorno.Id = (Guid)dt.Rows[0]["Id"];
                TipoPagamentoRitorno.Descrizione = dt.Rows[0]["Descrizione"].ToString();
                TipoPagamentoRitorno.Giorni = Convert.ToInt16(dt.Rows[0]["Giorni"]);
                ListaRitorno.Add(TipoPagamentoRitorno);
                 
            }
            return ListaRitorno;
            
        }
    }
}
